package com.hk.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hk.Enume.OperationType;
import com.hk.annotation.AotoFile;
import com.hk.constant.LogConstaant;
import com.hk.core.Result;
import com.hk.domain.Dept;
import com.hk.mapper.DeptMapper;
import com.hk.service.DeptService;
import com.hk.vo.TreeVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;

/**
 * 部门信息
 */
@RequestMapping("/system/dept")
@RestController
@Slf4j
public class DeptController{

    @Autowired
    private DeptService deptService;

    @Autowired
    private DeptMapper deptMapper;

    /**
     * 查询部门信息
     */
    @GetMapping("/list")
    public Result getAll(String deptName,Integer status){
        LambdaQueryWrapper<Dept> wrapper = new LambdaQueryWrapper<>();
        //支持部门名称模糊查询部门
        wrapper.like(StringUtils.isNotEmpty(deptName),Dept::getDeptName,deptName);
        //根据状态查询部门
        wrapper.eq(status != null,Dept::getStatus,status);
        List<Dept> depts = deptMapper.selectList(wrapper);
        //数据库没有设置这两个字段，前端返回全为空的数组，所以这里手动设置
        for (Dept dept : depts) {
            dept.setChildren(new ArrayList());
            dept.setUsers(new ArrayList());
        }
        return Result.success(depts);
    }

    /**
     * 修改部门时部门信息页面回显
     */
    @GetMapping("/{id}")
    public Result getDeptById(@PathVariable("id") Integer deptId){
        Dept dept = deptMapper.selectOne(Wrappers.<Dept>lambdaQuery().eq(Dept::getDeptId, deptId));
        return Result.success(dept);
    }

    /**
     * 修改部门信息
     * @return
     */
    @AotoFile(value = OperationType.PUT,title = LogConstaant.DEPT_LOG)
    @PutMapping
    public Result updateById(@RequestBody Dept dept){
        log.info("修改部门信息：{}",dept);
        deptService.updateByDeptId(dept);
        return Result.success();
    }

    /**
     * 新增部门信息
     * @param dept 部门信息
     * @return
     */
    @AotoFile(value = OperationType.POST,title = LogConstaant.DEPT_LOG)
    @PostMapping
    public Result addDept(@RequestBody Dept dept){
        log.info("开始添加部门信息{}",dept);
        deptMapper.insert(dept);
        return Result.success();
    }

    /**
     * 根据部门id删除部门信息
     * @param deptId
     * @return
     */
    @AotoFile(value = OperationType.DELETE,title = LogConstaant.DEPT_LOG)
    @DeleteMapping("/{id}")
    public Result deleteById(@PathVariable("id") Integer deptId) throws Exception{
        deptService.deleteById(deptId);
        return Result.success();
    }

    /**
     * 部门信息回显（下拉框）
     * @return
     */
    @GetMapping("/treeselect")
    public Result getDeptInfo(){
        return Result.success(deptMapper.selectOrgTree());
    }
}
